using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ReadyToUseTools._Hydrology
{
    /// <summary>
    /// <para>Trace Downstream</para>
    /// <para>Determines the path water will take from a particular location to its furthest downhill path.</para>
    /// <para>确定水从特定位置到最远下坡路径的路径。</para>
    /// </summary>    
    [DisplayName("Trace Downstream")]
    public class TraceDownstream : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public TraceDownstream()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_InputPoints">
        /// <para>Input Points</para>
        /// <para>The point features used for calculating downstream trace.</para>
        /// <para>用于计算下游迹迹的点要素。</para>
        /// </param>
        public TraceDownstream(object _InputPoints)
        {
            this._InputPoints = _InputPoints;
        }
        public override string ToolboxName => "Ready To Use Tools";

        public override string ToolName => "Trace Downstream";

        public override string CallName => "agolservices.TraceDownstream";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_InputPoints, _PointIDField, _DataSourceResolution.GetGPValue(), _Generalize, _OutputTraceLine];

        /// <summary>
        /// <para>Input Points</para>
        /// <para>The point features used for calculating downstream trace.</para>
        /// <para>用于计算下游迹迹的点要素。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Points")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _InputPoints { get; set; }


        /// <summary>
        /// <para>Point ID Field</para>
        /// <para><xdoc>
        ///   <para>An integer or string field used to identify the input points.</para>
        ///   <para>The default is to use the unique ID field.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>用于标识输入点的整数或字符串字段。</para>
        ///   <para>默认设置是使用唯一 ID 字段。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Point ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _PointIDField { get; set; } = null;


        /// <summary>
        /// <para>Data Source Resolution</para>
        /// <para><xdoc>
        ///   <para>Specifies the source data resolution that will be used in the analysis. The values are an approximation of the spatial resolution of the digital elevation model used to build the foundation hydrologic database. Since many elevation sources are distributed in units of arc seconds, an approximation is provided in meters for easier understanding.</para>
        ///   <bulletList>
        ///     <bullet_item>Blank—The hydrologic source, built from a 3-arc second data source, which is approximately 90-meter resolution elevation data, will be used. This is the default.</bullet_item><para/>
        ///     <bullet_item>Finest—The finest resolution available at each location from all possible data sources will be used.</bullet_item><para/>
        ///     <bullet_item>10 meters—The hydrologic source, built from a 1/3 arc second data source, which is approximately 10-meter resolution elevation data, will be used.</bullet_item><para/>
        ///     <bullet_item>30 meters—The hydrologic source, built from a 1-arc second data source, which is approximately 30-meter resolution elevation data, will be used.</bullet_item><para/>
        ///     <bullet_item>90 meters—The hydrologic source, built from a 3-arc second data source, which is approximately 90-meter resolution elevation data, will be used.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将在分析中使用的源数据分辨率。这些值是用于构建基础水文数据库的数字高程模型的空间分辨率的近似值。由于许多高程源以角秒为单位分布，因此提供了以米为单位的近似值，以便于理解。</para>
        ///   <bulletList>
        ///     <bullet_item>空白—将使用基于 3 角秒数据源（分辨率约为 90 米的高程数据）构建的水文源。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>最佳 - 将使用所有可能数据源中每个位置可用的最佳分辨率。</bullet_item><para/>
        ///     <bullet_item>10 米 - 将使用根据 1/3 角秒数据源（大约是 10 米分辨率高程数据）构建的水文源。</bullet_item><para/>
        ///     <bullet_item>30 米 - 将使用根据 1 角秒数据源（分辨率约为 30 米高程数据）构建的水文源。</bullet_item><para/>
        ///     <bullet_item>90 米 - 将使用根据 3 角秒数据源（大约为 90 米分辨率高程数据）构建的水文源。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Data Source Resolution")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _DataSourceResolution_value? _DataSourceResolution { get; set; } = null;

        public enum _DataSourceResolution_value
        {
            /// <summary>
            /// <para> </para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description(" ")]
            [GPEnumValue(" ")]
            __,

            /// <summary>
            /// <para>Finest</para>
            /// <para>Finest—The finest resolution available at each location from all possible data sources will be used.</para>
            /// <para>最佳 - 将使用所有可能数据源中每个位置可用的最佳分辨率。</para>
            /// </summary>
            [Description("Finest")]
            [GPEnumValue("FINEST")]
            _FINEST,

            /// <summary>
            /// <para>10 meters</para>
            /// <para>10 meters—The hydrologic source, built from a 1/3 arc second data source, which is approximately 10-meter resolution elevation data, will be used.</para>
            /// <para>10 米 - 将使用根据 1/3 角秒数据源（大约是 10 米分辨率高程数据）构建的水文源。</para>
            /// </summary>
            [Description("10 meters")]
            [GPEnumValue("10m")]
            _10m,

            /// <summary>
            /// <para>30 meters</para>
            /// <para>30 meters—The hydrologic source, built from a 1-arc second data source, which is approximately 30-meter resolution elevation data, will be used.</para>
            /// <para>30 米 - 将使用根据 1 角秒数据源（分辨率约为 30 米高程数据）构建的水文源。</para>
            /// </summary>
            [Description("30 meters")]
            [GPEnumValue("30m")]
            _30m,

            /// <summary>
            /// <para>90 meters</para>
            /// <para>90 meters—The hydrologic source, built from a 3-arc second data source, which is approximately 90-meter resolution elevation data, will be used.</para>
            /// <para>90 米 - 将使用根据 3 角秒数据源（大约为 90 米分辨率高程数据）构建的水文源。</para>
            /// </summary>
            [Description("90 meters")]
            [GPEnumValue("90m")]
            _90m,

        }

        /// <summary>
        /// <para>Generalize</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the output watersheds will be smoothed into simpler shapes or conform to the cell edges of the original DEM.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—The edges of the polygons will conform to the cell edges of the original DEM. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—The polygon boundaries will be smoothed into simpler shapes.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是将输出分水岭平滑为更简单的形状还是符合原始 DEM 的像元边缘。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 面的边将与原始 DEM 的像元边保持一致。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 面边界将被平滑为更简单的形状。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Generalize")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _Generalize { get; set; } = null;


        /// <summary>
        /// <para>Output Trace Line</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Trace Line")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _OutputTraceLine { get; set; }


        public TraceDownstream SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}